//一维差分
const int N = 1e5 + 10;
int n, m;
int b[N];
void insert(int l, int r, int c)
{
    b[l] += c;
    b[r+1] -= c;
}
int main()
{
    cin >> n >> m;
    for(int i=1; i<=n; i++)
    {
        int x;
        cin >> x;
        insert(i, i, x);
    }
    while(m--)
    {
        int l, r, c;
        cin >> l >> r >> c;
        insert(l, r, c);
    }
    for(int i=1; i<=n; i++)
    {
        b[i] = b[i-1] + b[i];
        cout << b[i] << " ";
    }
}
//二维差分矩阵
const int N = 1010;
int n, m, q;
int b[N][N];
void insert1(int x1, int y1, int x2, int y2, int c)//每一个坐标代表一个数
{
    b[x1][y1] += c;
    b[x1][y2+1] -= c;
    b[x2+1][y1] -= c;
    b[x2+1][y2+1] += c;
}
void insert2(int x1, int y1, int x2, int y2, int c)//每一个坐标代表一个点
{
    b[x1][y1] += c;
    b[x1][y2] -= c;
    b[x2][y1] -= c;
    b[x2][y2] += c;
}
int main()
{
    cin >> n >> m >> q;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            int x;
            cin >> x;
            insert1(i, j, i, j, x);//预处理
        }
    while(q--)
    {
        int x1, y1, x2, y2, c;
        cin >> x1 >> y1 >> x2 >> y2 >> c;
        insert1(x1, y1, x2, y2, c);
    }
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            b[i][j] += b[i-1][j] + b[i][j-1] - b[i-1][j-1];
            cout << b[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
//差分思想：只修改左右端点
区间修改使得数列全部相等的最小次数,每次选择一个区间+1或者-1
要求使一个数列中的数全部相同，就可以转化成使这个数列的差分数组全部为0。
因为我们只要求A序列中所有的数相同，而不在意这些方案具体是什么，所以说我们就可以转化题目，也就是将对A序列的操作，让A序列相同，改成目标把利用差分的修改：
变成全0即可，也就是A序列全部相等。
，每一次选取一个Bi和Bj，（2<=i,j<=n）,而且这两个数，一个为正数，一个为负即可